昨天介紹完了UIMenu,今天就來講刪除功能的實作吧!
是透過每筆資料獨立的id來進行刪除資料的動作
// 刪除資料
func deleteData(id: String){
if self.connectDB() {
let deleteData = "DELETE FROM RESUME WHERE id = ?"
if self.database.executeUpdate(deleteData, withArgumentsIn: [id]) {
print("刪除資料成功")
}else{
print("刪除資料失敗")
print(database.lastError(), database.lastErrorMessage())
}
self.database.close()
}
}
問題來了~那要怎麼知道被點擊的cell與資料id的關聯呢?
我們在cell的swift檔宣告了一個protocol,也要記得宣吿delegate
var delegate: ResumeTableViewCellListener?
var index = 0
protocol ResumeTableViewCellListener{
func buttonClicked(buttonType: String, index: Int)
}
再去主畫面新增一個extension來實作這個protocol,根據按鈕類型的不同可以分別進行不同的動作,由於array和cell的index都是從0開始,故可以直接將其轉換,所以在case "delete"加上刪除資料的function就可以成功刪除資料了
extension MainVC: ResumeTableViewCellListener{
func buttonClicked(buttonType: String, index: Int) {
switch buttonType {
case "details" :
print("詳細資料")
case "delete" :
Database.shared.deleteData(id: resumeList[index].id)
self.fetchData()
default:
break
}
}
}
要記得在tableView的cellForRowAt加上cell.delegate = self,這樣按下按鈕才會執行刪除動作哦
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "ResumeTableViewCell",for: indexPath) as! ResumeTableViewCell
cell.nameLabel.text = resumeList[indexPath.row].name
cell.ageLabel.text = String(resumeList[indexPath.row].age)
cell.delegate = self
return cell
}
明天就來實作如何修改資料吧!